package edu.zut.repository;

import edu.zut.pojo.AyUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.data.repository.query.parser.PartTree;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


public interface AyUserRepository extends JpaRepository<AyUser,Integer>,JpaSpecificationExecutor<AyUser> {



    /**
     * 利用jpa规范自定义查询
     * find By 属性名称  Like And ....
     * 也可以使用query代表查询
     */
    List<AyUser> findByNameLike(String name);


    AyUser findByMailAndName(String mail,String name);

    /**
     * 自定义删除   返回值空
     * @param name
     * @param id
     */
    void deleteByNameAndId(String name,Integer id);


    /**
     * @Query : 代表查询
     *    from 是 表对应的实体类名
     *    可以不写select ...
     *    参数 ?1   ?2
     *
     */
    @Query(value = "from AyUser where name like ?1%")
    List<AyUser> findUserByLikeName(String name);

    //nativeQuery  原生sql   默认false
    @Query(nativeQuery = true,value = "select * from ay_user where name like ?1%")
    List<AyUser> findByLikeName2(String name);

    /**
     * 自定义修改
     * @Modifying : 将query转为 修改或删除  此时调用时需要事务支持
     */
    @Modifying
    @Query(value = "update AyUser set name = ?1 where id=?2")
    int updateNameById(String name,Integer id);

    /**
     * @Param : 注解  手动进行参数适配   sql中使用   :名称
     * @return
     */
    @Query("from AyUser where name=:username and mail=:email")
    List<AyUser> queryAyUserByParam(@Param("username") String name, @Param("email") String mail);




}
